package repository

import (
	"context"

	"Data-API-MCP/backend/internal/domain/entity"
)

// MCPMessageRepository MCP消息仓储接口
type MCPMessageRepository interface {
	// CreateMessage 创建消息
	CreateMessage(ctx context.Context, message *entity.MCPMessage) error

	// GetMessage 获取消息
	GetMessage(ctx context.Context, id string) (*entity.MCPMessage, error)

	// ListMessagesByContext 获取指定上下文的消息列表
	ListMessagesByContext(ctx context.Context, contextID string, offset, limit int) ([]*entity.MCPMessage, error)

	// UpdateMessageStatus 更新消息状态
	UpdateMessageStatus(ctx context.Context, id string, status string) error

	// DeleteMessage 删除消息
	DeleteMessage(ctx context.Context, id string) error
}

// MCPContextRepository MCP上下文仓储接口
type MCPContextRepository interface {
	// CreateContext 创建上下文
	CreateContext(ctx context.Context, mcpContext *entity.MCPContext) error

	// GetContext 获取上下文
	GetContext(ctx context.Context, id string) (*entity.MCPContext, error)

	// UpdateContext 更新上下文
	UpdateContext(ctx context.Context, mcpContext *entity.MCPContext) error

	// UpdateContextState 更新上下文状态
	UpdateContextState(ctx context.Context, id string, state interface{}) error

	// DeleteContext 删除上下文
	DeleteContext(ctx context.Context, id string) error

	// ListContextsByService 获取指定服务的上下文列表
	ListContextsByService(ctx context.Context, serviceID string, offset, limit int) ([]*entity.MCPContext, error)
}

// MCPModelRepository MCP模型仓储接口
type MCPModelRepository interface {
	// CreateModel 创建模型
	CreateModel(ctx context.Context, model *entity.MCPModel) error

	// GetModel 获取模型
	GetModel(ctx context.Context, id string) (*entity.MCPModel, error)

	// UpdateModel 更新模型
	UpdateModel(ctx context.Context, model *entity.MCPModel) error

	// DeleteModel 删除模型
	DeleteModel(ctx context.Context, id string) error

	// ListModels 获取模型列表
	ListModels(ctx context.Context, offset, limit int) ([]*entity.MCPModel, error)

	// GetModelByVersion 根据版本获取模型
	GetModelByVersion(ctx context.Context, name, version string) (*entity.MCPModel, error)
}

// MCPProtocolManager MCP协议管理器接口
type MCPProtocolManager interface {
	MessageRepository() MCPMessageRepository
	ContextRepository() MCPContextRepository
	ModelRepository() MCPModelRepository
}
